Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con D3DXSaveSurfaceToFile

Iniciado por Drácula, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Drácula

                                Cuando grabo el backbuffer, me aparece TODO del mismo color. Y no entiendo porqué, puesto que creo que lo hago correctamente.

Este es mi código:

   LPDIRECT3DSURFACE8 pBackBuffer;

   m_pd3dDevice->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer );

   HRESULT hr=D3DXSaveSurfaceToFile(nombre,
      D3DXIFF_BMP,   // Formato
      pBackBuffer,
      NULL,   // Paleta
      NULL   // Rectángulo del area a grabar
      );
   if(hr!=D3D_OK) {
      EstablecerUltimoError(hr);
      Merlin.Debug(_T("CXVideo::GrabarPantalla"),*UltimoError());
   }
   pBackBuffer->Release();


¿Alguien puede ayudarme?
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

NeLo

                                Hi Drácula.

Ese código es correcto. Por si acaso lo he probado, pero efectivamente funciona.

No se que puede fallar. :triste:

Saludos.                                
Drowning deep in my sea of loathing

Astat

                                Y ese color no sera el color con el que borras?

Prueba a pedir el FrontBuffer en vez del BackBuffer. Pasa de las D3DX y usa :

LPDIRECT3DSURFACE8 lpSurface = NULL;
m_pD3DDevice->CreateImageSurface(dwWidth, dwHeight, D3DFMT_A8R8G8B8, &lpSurface);
m_pD3DDevice->GetFrontBuffer(lpSurface);

y luego lo metes todo en una estructura BITMAPFILEHEADER y BITMAPINFOHEADER. Tambien tendras que pasar del formato de la surface a un DIB y listo! :ojo:


                               

mallrat

                                Drácula el problemilla es que no puedes leer directamente el backbuffer, tienes que crear una superficie en memoria de sistema con el mismo tamaño y formato y hacer un CopyRects(). El de memoria de sistema si le puedes hacer Lock() o grabar en disco o lo que quieras.

saludos
                               

Drácula

                                Gracias, ya lo he probado y me funciona. Tenía que coger el forntbuffer y crear una área, como me habeis dicho.
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

NeLo

                                Y se puede saber por qué a mi me funciona?                                
Drowning deep in my sea of loathing

Astat

                                Pues seguramente, Nelo, porque NO borras el backbuffer en cada frame... digo yo, vamos...


                               

NeLo

                                SI lo borro.                                
Drowning deep in my sea of loathing

BeRSeRKeR

                                Por si sirve de algo, échale un vistazo a la page de http://www.mvps.org/directx/articles/screengrab.htm">Robert Dunlop

Un saludo
                               
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

mallrat

                                Buenas, capturando el FrontBuffer no habia el problema de que te pillaba tambien el escritorio del windows cuando estas en modo ventana? no estoy seguro pero creo que era por eso por lo que lo hice capturando el BackBuffer, Drácula tu lo habrás probado en modo ventana... funciona bien? porque si funciona bien paso del BackBuffer ya mismo.
                               

NeLo

                                Hi mallrat

Probé a coger el FrontBuffer, y en modo ventana me cogía toda la pantalla.

Yo seguiré con BackBuffer si no encuentro algo mejor. :-?

Saludos.                                
Drowning deep in my sea of loathing

Drácula

                                Sí que se graba toda la pantalla al usar el FrontBuffer en modo ventana. Pero yo lo recorto, pasando a la función de grabar sólo el rectángulo de la ventana. Si quieres, puedo darte el código...                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.